package com.zw.a.basic.a15.demo05_properties;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

//案例: 演示Properties集合类的使用.
/*
    Properties集合类详解:
        概述:
            它是一个双列集合, 是Hashtable的子类, 它的键和值都是String类型的.
            它是唯一一个可以直接和IO流相结合使用的集合类.
        成员方法:
            public void setProperty(String key, String value);      类似于Map#put()
            public String getProperty(String key);                  类似于Map#get()

            public void load(InputStream is);        可以直接从流中获取数据.
            public void load(Reader r);

            public void store(OutputStream os, String comments);      可以直接把集合中的数据写到流中.
            public void store(Writer w, String comments);

 */
public class Demo01 {
    public static void main(String[] args) throws Exception {
        //需求1: Properties集合入门.
        //method01();

        //需求2: Properties读取流中的数据.
        //method02();

        //需求3: Properties往流中写数据.
        //1. 创建Properties集合.
        Properties pp = new Properties();
        //2. 直接从流中加载元素
        pp.load(new FileInputStream("day15/src/class.properties"));

        //3. 修改数据.
        pp.setProperty("address", "xinxiang");
        pp.setProperty("name", "dalige");

        /*
            不要写中文, 因为properties文件中会自动将中文转成其对应的Unicode码表形式.
            你在IDEA中看到的中文, 只是IDEA帮你翻译后的, 并不是说源文件中也是中文.
         */
        //pp.setProperty("name", "大力哥");


        //4. 把数据从新写会流中.
        //pp.store(new FileOutputStream("day15/src/class.properties"), "hangge version2.0");
        pp.store(new FileOutputStream("day15/src/class.properties"), null);

        //5. 打印properties集合.
        System.out.println(pp);
    }

    public static void method02() throws IOException {
        //1. 创建Properties集合.
        Properties pp = new Properties();
        //2. 直接从流中加载元素
        pp.load(new FileInputStream("day15/src/class.properties"));
        //3. 打印properties集合.
        System.out.println(pp);
    }

    public static void method01() {
        //1. 创建Properties集合.
        Properties pp = new Properties();
        //2. 添加几个元素.
        pp.setProperty("name", "liulaoshi");
        pp.setProperty("address", "beijing");
        //pp.put("email", "123@qq.com");
        //3. 打印properties集合.
        System.out.println(pp);
        //4. 根据键获取值
        System.out.println(pp.get("name"));
    }
}
